perm filename COUNTL.LSP[AID,LSP] blob sn#694858 filedate 1983-01-10 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	(declare (fixsw t))
C00004 ENDMK
CāŠ—;
(declare (fixsw t))
(declare (special alist))

(defun countlines (file)
       (let ((f (eopen file '(in ascii)))
	     (alist ())
	     (eof (ncons ())))
	    (do ((n 0)
		 (exp (read f eof) 
		      (read f eof)))
		((eq exp eof) (close f)
			      n)
		(cond ((or (atom exp)
			   (numberp exp)
			   (null exp)))
		      ((eq (car exp) 'define)
		       (push `(,(cadr exp) . ,(countmacro (cdddr exp)))
			     alist))
		      ((memq (car exp) '(s1lap declare defsym)))
		      (t (let ((v (assq (car exp) alist)))
			      (cond (v (setq n (+ (cdr v) n)))
				    (t (setq n (1+ n))))))))))

(defun countmacro (l)
       (do ((l l (cdr l))
	    (n 0))
	   ((null l) n)
	   (cond ((atom (car l)))
		 ((numberp (car l)))
		 ((memq (caar l) '(s1lap declare defsym)))
		 (t (let ((v (assq (caar l) alist)))
			 (cond (v (setq n (+ (cdr v) n)))
			       (t (setq n (1+ n)))))))))

(defun countfiles (files)
       (do ((n 0)
	    (files files (cdr files)))
	   ((null files) n)
	   (setq n (+ n (countlines (car files))))))